home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / dev / e / cha_source.lha / cha_source / oss_input.e < prev    next >
Encoding:
Text File  |  1999-12-18  |  1.6 KB  |  56 lines

  1. /*==========================================================================+
  2. | oss_input.e                                                               |
  3. | input buffer to read from OSS sample space                                |
  4. +--------------------------------------------------------------------------*/
  5.  
  6. OPT PREPROCESS
  7. OPT MODULE
  8.  
  9. MODULE '*inputbuffer', '*oss', '*oss_sample', '*word', '*debug'
  10.  
  11. /*-------------------------------------------------------------------------*/
  12.  
  13. EXPORT OBJECT oss_input OF inputbuffer
  14. PUBLIC
  15.     info : PTR TO oss_sample
  16. PRIVATE
  17.     rptr : LONG   -> current index
  18. ENDOBJECT
  19.  
  20. PROC oss_input(sample) OF oss_input HANDLE
  21.     self.inputbuffer()
  22.     NEW self.info.oss_sample(sample)
  23.     IF self.info.channels <> 1 THEN Throw("oss", 'only mono supported')
  24.     IF (self.info.type <> SAMPLETYPE_SAMPLE8) AND
  25.        (self.info.type <> SAMPLETYPE_SAMPLE16)
  26.         Throw("oss", 'only 8/16 bit samples supported')
  27.     ENDIF
  28. EXCEPT
  29.     self.end()
  30.     ReThrow()
  31. ENDPROC
  32.  
  33. PROC end() OF oss_input
  34.     END self.info
  35. ENDPROC SUPER self.end()
  36.  
  37. PROC read() OF oss_input
  38.     DEF x = 0.0, byteptr : PTR TO CHAR, wordptr : PTR TO INT
  39.     IF self.rptr < self.info.length
  40.         IF     self.info.bits =  8
  41.             byteptr := self.info.data
  42.             x := sbyte2f(sbyte(byteptr[self.rptr]))
  43.         ELSE
  44.         ->ELSEIF self.info.bits = 16
  45.             wordptr := self.info.data
  46.             x := sword2f(sword(wordptr[self.rptr]))
  47.         ENDIF
  48.         self.rptr := self.rptr + 1
  49.     ENDIF
  50.     debug(['read = \d', ! x * 100.0 !])
  51. ENDPROC x
  52.  
  53. /*--------------------------------------------------------------------------+
  54. | END: oss_input.e                                                          |
  55. +==========================================================================*/
  56.